# 3.显示字符串 ## 1.以以下代码创建mbr.asm ```none ;MBR程序,用于加载loader LOADER_BASE equ 0x900 org 0x7c00 MBR_start: ;现在es,cs,ss,ds,fs,gs ;r8,r9,r10,r11,r12,,r13,r14,r15,rbx,rbp均为0 mov ds,bx mov sp,0x7c00 ;设定栈为ss:sp=0:0x7c00 .clean_screen: ;清除屏幕 mov ax,0x0600 mov bx,0x0700 mov cx,0 mov dx,0x184f int 10h .set_cursor: ;设置光标 mov ah,0x02 mov bh,0x00 ;页号 mov dx,0x0000 ;(DH,DL) int 10h .display_str: ;显示:“MBR loader successfully!" mov ax,0x1301 ;光标随字符走 mov bp,Message ;字符地址:es:bp=0:Message mov cx,24 ;字符串长度 mov dx,0 ;字符打印位置 mov bl,0011b ;字符串属性:前景青色,背景黑色 int 0x10 hlt Message: db "MBR loader successfully!" times 510-($-$$) db 0 dw 0xaa55 ``` ## 2.创建Kernel/init目录 将上面创建的mbr.asm放入`Kernel/init`目录下,以一下内容创建`makefile`: ```makefile %.bin:%.asm nasm $*.asm -o $*.bin mbr:mbr.bin ``` ## 3.修改meOS/makefile 将meOS下的makefile修改为一下内容: ```makefile %.bin:%.asm nasm $*.asm -o $*.bin start: make mbr make bochs .PHONY:start mbr clean bochs: cd image&&bochsdbg -q -f bochsrc.bxrc mbr: cd Kernel/init&&make mbr dd if=Kernel/init/mbr.bin of=image/c.img bs=512 count=1 clean: -@cd image&&erase /F /Q *.lock -@cd Kernel/init&&erase /F /Q *.bin ``` ​ 其中,每次更换写入文件时,都会重写`start`的内容,目的是执行`make`后自动编译写入映像并进入Bochs ## 4.运行 ​ 进入meOS目录,双击`start.cmd`打开终端。输入`make`,在终端可以继续运行时,输入`c继续`运行。效果如下: 然后键入`Ctrl+c`中断模拟器,输入`q`退出Bochs ## 目录结构 到现在为止,meOS的目录结构如下: | -- meOS ​ | -- makefile ​ | -- start .cmd //在当前目录打开终端 ​ | -- image //bochs映像、配置文件、输出文件目录 ​ | | -- bochsrc.bxrc ​ | | -- c.img ​ | -- Kernel ​ | | -- init ​ | | -- makefile //mbr.asm的make文件 ​ | | -- mbr.asm